//初始化菜单目录树
$(document).ready(function(){
	//初始化用户信息
	initUserInfo();
    //初始化菜单树
    initOrg();
    //初始化表单验证
    initOrgFormValid();
    //下拉控件初始化
    initSelect();
    
	//保存整个菜单目录
	$("#btnSaveOrg").click(function(){
		var treeObj = $.fn.zTree.getZTreeObj("treeOrg");
		var node = treeObj.getNodes();
		//批量保存菜单
		batchSaveOrg(node[0].children);
	});
	
	//刷新整个菜单目录
	$("#btnRefreshOrg").click(function(){
		//初始化菜单树
	    initOrg();
	    $(".right").hide();
	});
	
	//保存单个菜单目录
	$("#btnSaveOrgNode").click(function(){
		//添加菜单
		addOrg();
	});
	
	//关闭单个菜单目录
	$("#btnCloseOrgNode").click(function(){
		$(".right").hide();
	});
	
	//展开整个目录
	$("#btnDownOrg").click(function(){
		//全部展开
		var treeObj = $.fn.zTree.getZTreeObj("treeOrg");
		treeObj.expandAll(true);
	});
	
	//关闭整个目录
	$("#btnUpOrg").click(function(){
		//全部关闭
		var treeObj = $.fn.zTree.getZTreeObj("treeOrg");
		treeObj.expandAll(false);
	});
	
});

var setting = {
	view: {
		addHoverDom: addHoverDom,
		removeHoverDom: removeHoverDom,
		selectedMulti: false
	},
	edit: {
		enable: true,
		editNameSelectAll: true,
		showRemoveBtn: showRemoveBtn,
		showRenameBtn: false
	},
	data: {
		key: {
			name: "orgName"
		},
		simpleData: {
			enable: true,
			idKey: "orgId",
			pIdKey: "parentOrgId",
		}
	},
	callback: {
		beforeClick: beforeClick,//点击菜单
		beforeDrag: beforeDrag,//菜单拖拽
		//beforeEditName: beforeEditName,//编辑菜单
		beforeRemove: beforeRemove
	}
};


//显示移除按钮
function showRemoveBtn(treeId, treeNode) {
	//顶层根目录不允许删除
	if(treeNode.orgId == 0 || treeNode.level == 0){
		return false;
	}
	//含有子节点的不允许删除
	if(treeNode.children){
		return false;
	}
	return true;
}

//节点点击事件
function beforeClick(treeId, treeNode){
	if(treeNode.orgId == 0){
		return;
	}
	//重置验证
	initOrgFormValid().resetForm();
	$("#orgForm").find(".has-error").removeClass("has-error");
	//重置表单数据
	$("#orgForm").get(0).reset();
	$("#orgForm").find("#orgName").val(treeNode.orgName);
	$("#orgForm").find("#parentOrgId").val(treeNode.parentOrgId);
	//判断菜单属性是否存在
	if(treeNode.hasOwnProperty("orgCode")){//编码
		$("#orgForm").find("#orgCode").val(treeNode.orgCode);
		$("#orgForm").find("#orgId").val(treeNode.orgId);
		//操作标识：1，表示添加、2表示修改
		$("#orgForm").find("#type").val("2");
		/*
		//设置角色下拉框宽度
		$("#orgForm").find("#roleIds_chosen").css("width","100%");
		var roleIds = new Array();
		if(null != treeNode.roleIdStr && "" != treeNode.roleIdStr){
			roleIds = treeNode.roleIdStr.split(",");
		}
		//初始化角色选择数据
		initRoleSelect("#roleIds",roleIds);
		*/
		//隐藏组织编码
		$("#divOrgCode").show();
		//设置只读
		$("#orgForm").find("#orgCode").prop("readOnly","readOnly");
	}else{
		//操作标识：1，表示添加、2表示修改
		$("#orgForm").find("#type").val("1");
		/*
		//设置角色下拉框宽度
		$("#orgForm").find("#roleIds_chosen").css("width","100%");
		//初始化角色选择数据
		initRoleSelect("#roleIds");
		*/
		//隐藏组织编码
		$("#divOrgCode").hide();
	}
	if(treeNode.hasOwnProperty("status")){//状态
		$("#orgForm").find("#status").val(treeNode.status);
	}
	if(treeNode.hasOwnProperty("remark")){//备注
		$("#orgForm").find("#remark").val(treeNode.remark);
	}
	$(".right").show();//显示菜单详细信息
	
	
}

//判断节点是否可以拖拽
function beforeDrag(treeId, treeNodes) {
	if(treeNodes[0].orgId == 0){
		return false;
	}
	return true;
}

//删除节点
function beforeRemove(treeId, treeNode) {
	//删除数据模式窗口
	swal({
		title : "您确定要删除这些信息吗",
		text : "删除后将无法恢复，请谨慎操作！",
		type : "warning",
		showCancelButton : true,
		confirmButtonColor : "#DD6B55",
        cancelButtonText : "取消",
		confirmButtonText : "删除",
		closeOnConfirm : false
	}, function() {
	    $.ajax({url:'/init/org/deleteOrg',
	    	data:CommonUtils.encapsulationData({orgId:treeNode.orgId}),
	    	type:'post', 
	    	async:false,//同步请求
	    	dataType:'json',  
	    	contentType: "application/json",
	    	success:function(data) {  
	    		if(data.result){
	    			//消息提示款
					swal({title : "恭喜您",text : data.msg,type : "success"},function(){
						//初始化菜单树
					    initOrg();
					    $(".right").hide();//显示菜单详细信息
					});
	    		}
	    	},
	    	error : function(req, status, err) { 
	    		//消息提示款
				errorFunc(req, status, err);
	    	}  
	    });
	});
	return false;
}

//鼠标移上节点显示添加、删除节点按钮
var newCount = 1;
function addHoverDom(treeId, treeNode) {
	var sObj = $("#" + treeNode.tId + "_span");
	if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length>0) return;
	var addStr = "<span class='button add power-a' power='OrgAdd' id='addBtn_" + treeNode.tId + "' title='add node' onfocus='this.blur();'></span>";
	sObj.after(addStr);
	var btn = $("#addBtn_"+treeNode.tId);
	if (btn) btn.bind("click", function(){
		var zTree = $.fn.zTree.getZTreeObj("treeOrg");
		zTree.addNodes(treeNode, {orgId:(100 + newCount), parentOrgId:treeNode.orgId, orgName:"new node" + (newCount++)});
		return false;
	});
	sObj.parent().find(".remove").addClass("power-a");
	sObj.parent().find(".remove").attr("power","OrgDelete");
	//设置功能元素
    setModule(JSON.parse(CommonUtils.getTempData("module")),"power-a");
};

//鼠标移除节点隐藏添加、删除节点按钮
function removeHoverDom(treeId, treeNode) {
	$("#addBtn_"+treeNode.tId).unbind().remove();
};

//查询组织集合
var findOrgList = function(){
	//组织节点
	var zNodes = new Array();
	//请求后台
	$.ajax({url:"/init/org/findOrgList",
		data:CommonUtils.encapsulationData({}),
    	type:'post', 
    	async:false,//同步请求
    	dataType:'json',  
    	contentType: "application/json",
    	success:function(data) {  
    		if(null != data && data.length > 0){
    			zNodes = data;
    		}
    	},
    	error : function(req, status, err) { 
    		//消息提示款
			errorFunc(req, status, err);
    	}  
    });
	return zNodes;
}


//添加菜单
var addOrg = function(){
	//验证表单数据
	if (!$("#orgForm").valid()) {
		return;
    }
	//获取表单元素所有数据集合
	var formData = CommonUtils.getFormJson('#orgForm');
	//操作标识：1，表示添加、2表示修改
	var type = $("#orgForm").find("#type").val(); 
	var url = null;
	if(type == "2"){//修改
		url = "/init/org/updateOrg";
		//设置栏目Id
		formData.orgId = $("#orgForm").find("#orgId").val();
	}else{//添加
		url = "/init/org/addOrg";
	}
	//设置父节点Id
	var parentOrgId = $("#orgForm").find("#parentOrgId").val();
	formData.parentOrgId = parentOrgId;
	/*
	//设置角色
	var roleIds = $("#roleIds").val();
	formData.roleIds = roleIds;
	*/
	//请求后台
	$.ajax({url:url,
		data:CommonUtils.encapsulationData(formData),
    	type:'post', 
    	dataType:'json',  
    	contentType: "application/json",
    	success:function(data) {  
    		if(data.result){
    			//消息提示款
				swal({title : "恭喜您",text : data.msg,type : "success"},function(){
					//初始化菜单树
				    initOrg();
				    $(".right").hide();
				});
    		}else{
    			//消息提示款
				swal({title : "很抱歉",text : data.msg,type : "error"});
    		}
    	},
    	error : function(req, status, err) { 
    		//消息提示款
			errorFunc(req, status, err);
    	}  
    });
}

//批量菜单集合
var batchSaveOrg = function(nodes){
	//请求后台
	$.ajax({url:"/init/org/updateBatchOrg",
		data:CommonUtils.encapsulationData({nodes:nodes}),
    	type:'post', 
    	dataType:'json',  
    	contentType: "application/json",
    	success:function(data) {  
    		if(data.result){
    			//消息提示款
				swal({title : "恭喜您",text : data.msg,type : "success"},function(){
					//初始化菜单树
				    initOrg();
				});
    		}else{
    			//消息提示款
				swal({title : "很抱歉",text : data.msg,type : "error"});
    		}
    	},
    	error : function(req, status, err) { 
    		//消息提示款
			errorFunc(req, status, err);
    	}  
    });
}


//初始化菜单树
var initOrg = function(){
	//查询所有菜单目录并转换
	var nodes = findOrgList();
	var id = 0;
	if(null != nodes && nodes.length > 0){
		for(var i = 0; i < nodes.length; i++){
			if(i == 0){
				id = parseInt(nodes[i].parentOrgId);
			}else{
				id = parseInt(nodes[i].parentOrgId) > id ? id : parseInt(nodes[i].parentOrgId);
			}
		}
	}
	if(id == 0){
		//增加顶层根目录
		nodes.push({ orgId:0,parentOrgId:-1,orgName:"组织架构",open:true});
	}
	//初始化栏目菜单
	$.fn.zTree.init($("#treeOrg"), setting, nodes);
	//全部展开
	var treeObj = $.fn.zTree.getZTreeObj("treeOrg");
	treeObj.expandAll(true);
}

//表单验证初始化
var initOrgFormValid = function(){
	var e = "<i class='fa fa-times-circle'></i> ";
	var validate = $("#orgForm").validate({
		rules : {
			orgName : {
				required : !0,
				maxlength : 25
			},
			orgCode : {
				required : !0,
				maxlength : 100,
			}
		},
		messages : {
			orgName : {
				required : e + "请填点名称",
				maxlength : e + "名称不能超过25字符"
			},
			orgCode : {
				required : e + "请填写路径",
				maxlength : e + "路径不能超过100字符",
			}
		},
		highlight : function(e) {
			if(e.type == "radio" || e.type == "checkbox"){
				$(e).parent().parent().removeClass("has-success").addClass("has-error");
			}else{
				$(e).parent().removeClass("has-success").addClass("has-error");
			}
		},
		success : function(e) {
			if(e.type == "radio" || e.type == "checkbox"){
				$(e).parent().parent().removeClass("has-error");//.addClass("has-success")
			}else{
				$(e).parent().removeClass("has-error");//.addClass("has-success")
			}
		},
		errorElement : "span",
		errorPlacement : function(e, r) {
			if(r.is(":radio") || r.is(":checkbox")){
				e.appendTo(r.parent().parent());
			}else{
				e.appendTo(r.parent());
			}
		},
		errorClass : "help-block m-b-none",
		validClass : "help-block m-b-none"
	});
	return validate;
}

//查询有效角色集合信息
var findRolesInfo = function() {
	var roles = null;
	$.ajax({url:'/init/role/findRoles',
		data:CommonUtils.encapsulationData({}),
		type:'post',  
		dataType:'json',
		async:false,//同步请求
		contentType: "application/json",
		success:function(data) {  
			if(null != data){
				roles = data;
			}
		},
		error : function(req, status, err) { 
			//消息提示款
			errorFunc(req, status, err);
		}  
	});
	return roles;
}

//初始化角色选择数据
var initRoleSelect = function(selectId,checkedArray){
	//获取有效角色
	var roles = findRolesInfo();
	if(null != roles && roles.length > 0){
		var option = "";
		for(var i = 0; i < roles.length; i++){
			option += '<option value="'+roles[i].roleId+'" hassubinfo="true">'+roles[i].roleName+'</option>';
		}
		$(selectId).html(option).trigger("chosen:updated");
		//默认值
		if(checkedArray && null != checkedArray){
			for(var j = 0; j < checkedArray.length; j++){
				$(selectId + " option[value='"+checkedArray[j]+"']").attr("selected","selected");
			}
			$(selectId).trigger("chosen:updated");
		}
	}
}
